iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
生成式 AI

2024 年用 LangGraph 從零開始實現 Agentic AI System系列 第 10

【Day 10】從零到一:用實戰案例掌握 LangGraph Studio 開發 AI 代理

  • 分享至 

  • xImage
  •  

摘要
本文介紹了 LangGraph Studio,一個專為 AI 代理應用程式開發設計的整合開發環境 (IDE)。文章首先介紹了 LangGraph Studio 的核心特色,包括可視化代理圖、即時互動和除錯與迭代。接著,文章詳細說明了使用 LangGraph Studio 的準備工作,包括系統需求、必要軟體和開發環境。文章還提供了一個步驟式的教學,指導讀者如何設定和使用 LangGraph Studio,包含建立檔案結構、安裝套件、撰寫 Agent 程式碼、配置 LangGraph Studio 設定、導入專案和與 AI 代理互動。文章進一步揭示了 LangGraph Studio 的運作原理,包含 LangGraph UI、LangChain/LangGraph API 和 Postgres 資料庫三個主要組件的協作。文章最後以一個實戰案例,展示了如何利用 LangGraph Studio 來打造智能客服資訊收集系統,並說明了從 Colab 概念驗證轉向資料夾結構的設計理念以及模組化設計的優勢。總之,本文旨在幫助讀者深入了解 LangGraph Studio 的功能、使用方法和運作原理,並引導讀者將其應用於實際的 AI 代理應用程式開發

前言

在人工智慧快速發展的今日,大型語言模型(Large Language Models,LLMs)的應用已成為許多開發者關注的焦點。而在這個趨勢中,LangChain 團隊推出的 LangGraph Studio 無疑是一個令人興奮的新工具。本文將深入探討 LangGraph Studio 的特色、使用方法以及其運作原理,幫助您快速掌握這個強大的 AI 開發工具。

img

1. LangGraph Studio 簡介

LangGraph Studio 是一款專為 AI 代理應用程式開發設計的整合開發環境(IDE)。它的目標是簡化 LLM 應用的開發流程,為開發者提供直觀的可視化介面、即時互動功能和強大的除錯工具,大幅提升開發 AI 代理應用的效率。

1.1 LangGraph Studio 的核心特色

  1. 可視化代理圖

    • 提供直觀的可視化圖表,幫助開發者輕鬆理解應用結構。
    • 允許開發者在代理執行過程中即時查看和修改結果或邏輯。
  2. 即時互動

    • 支援即時資訊流,展示代理決策和工具調用過程。
    • 讓開發者能根據即時回饋調整代理邏輯或結果。
  3. 除錯與迭代

    • 支援隨時中斷代理執行,進行除錯或修改。
    • 在除錯模式下執行並動態修改底層程式碼,方便對長時間執行的代理進行微調和效能最佳化。

這些特色使 LangGraph Studio 成為開發 AI 代理應用的理想選擇,特別適合需要複雜邏輯和長時間執行的專案。

2. 使用 LangGraph Studio 的準備工作

在開始使用 LangGraph Studio 之前,您需要注意以下幾點:

  1. 系統需求:目前 LangGraph Studio 僅支援 Mac 平台。
  2. 必要軟體:請確保您已安裝 Docker Desktop,這是執行 LangGraph Studio 的必要條件。
  3. 開發環境:下載最新版本的 LangGraph Studio。
  4. 範例專案:建議您先 Git Clone 一個範例專案,以快速熟悉開發流程。

小提醒:LangGraph Studio 會利用 Docker 將您的專案打包成前端網站,並在背後執行一個 API 伺服器處理查詢等操作。

3. LangGraph Studio 的使用方法

要開始使用 LangGraph Studio,您需要準備以下幾個關鍵元素:

  1. 包含代理定義的 Python 檔案
  2. LangGraph JSON 設定檔
  3. 必要的環境變數(如 Anthropic API 金鑰、OpenAI API 金鑰和 Tavily API 金鑰)

讓我們一步步來看如何設置和使用 LangGraph Studio。

3.1 步驟一:設定本地檔案結構

首先,您需要建立以下檔案結構來配置您的應用程式:

<my-app>/
|-- agent.py            # LangGraph Agent 程式碼
|-- requirements.txt    # 專案所需的 Python 套件
|-- langgraph.json      # LangGraph 設定檔
|-- .env                # 包含 API 金鑰的環境檔案

提醒:可以在官方 LangGraph Cloud 文件中找到每個檔案的用途

3.2 步驟二:安裝必要的套件

requirements.txt 檔案中,列出您的專案所需的套件:

langgraph
langchain_anthropic
tavily-python
langchain_community

3.3 步驟三:撰寫 Agent 程式碼

agent.py 檔案中,您需要定義您的 AI 代理。以下是一個簡單的範例:

from langgraph.graph import StateGraph

# 定義狀態和代理邏輯
State = ...  # 根據您的需求定義狀態
chatbot = ...  # 實現您的聊天機器人邏輯

# 建立圖形
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", chatbot)
graph_builder.set_entry_point("chatbot")
graph_builder.set_finish_point("chatbot")
graph = graph_builder.compile()

3.4 步驟四:配置 LangGraph Studio 設定

在 langgraph.json 檔案中,設置 LangGraph Studio 的配置:

{
  "python_version": "3.11",
  "dockerfile_lines": [],
  "dependencies": [
    "."
  ],
  "graphs": {
    "agent": "./graph.py:graph"
  },
  "env": ".env"
}

這個設定檔指定了 Python 版本、依賴項、圖形定義的位置,以及環境變數檔案的位置。

3.5 步驟五:導入專案到 LangGraph Studio

  1. 開啟 LangGraph Studio 應用程式。
  2. 將您的專案資料夾拖曳到 LangGraph Studio 中。
  3. 等待 Docker 映像檔建置完成。

補圖

3.6 步驟六:與您的 AI 代理互動

建置完成後,您就可以在 LangGraph Studio 的介面中與您的 AI 代理進行互動了。您可以輸入訊息,觀察代理的回應,並根據需要調整代理的行為。

img

至此你已經可以使用 LangGraph Studio 來調試你的 Graph 結構,官方已經有範例了,大家可以跟著做。
為了一致性,我也在收錄在此次比賽 Repo 當中,大家可以下載來使用。

4. LangGraph Studio 的運作原理

三個組件合成圖

4.1 LangGraph Studio 的架構包含三個主要組件:

  1. LangGraph UI(LangGraph Studio):
  • 提供可視化的工作環境
  • 允許設計和查看 LangGraph 流程圖
  • 提供使用者輸入介面和即時顯示對話過程
  1. LangChain/LangGraph API:
  • 執行在 8000 連接埠
  • 處理來自 UI 的請求
  • 執行 LangGraph 邏輯
  • 與各種 LLM 模型和工具互動
  1. Postgres 資料庫:
  • 執行在 5432 連接埠
  • 儲存對話歷史、使用者資訊和 LangGraph 設定
  • 確保系統可以在重啟後恢復狀態

這三個組件協同工作,為開發者提供一個強大而靈活的 AI 代理開發環境。

5. 實務上如何善用 LangGraph Studio?

進行玩上面操作的朋友,肯定會有個怪怪的感覺,怎麼之前操作 LangGraph 教學都是 colab ,現在突然要轉成資料夾進行操作?這其實也是 AI 發展中遇到的難題,概念驗證以及商務實作的編輯方式不同,為此這個章節用 收集客戶資訊 的實戰案例,帶大家從 Colab 開發,轉換到 project-based 資料集進行調整,每一步驟手把手帶。

6. 實戰案例:打造智能客服資訊收集系統

開發客服機器人時,會遇到一個狀況是,系統需要確認使用者的個人身份驗證是否正確。 這時候使用者需要掏出他的名稱、電話、身分證字號等,但事情沒有憨人想的這麼簡單,有時候只有填寫部分資訊,例如說只有給電話號碼而已。這個在程序上很麻煩,所以需要使用者反覆填寫一直到,客服機器人確認可行之後,才放行離開。

6.1 階段一:Colab 中的概念驗證

這次要解決的是客戶資訊收集,為此我們建立兩個節點,一個是客服節點,專門詢問使用者的個人資訊,另一個則是收集資訊節點,負責進行資料邏輯處理。

上設計圖

運作流程如下:

  1. 使用者先進入到客服節點,AI Agent 詢問使用者資訊
  2. 收集資訊節點評估是否齊全,如果滿足的話則結束,
  3. 若沒有則返回客服節點

6.1.1 定義節點和狀態管理

使用者資訊

class RequiredInformation(BaseModel):
    provided_full_name: Optional[str] = Field(
        description="the provided full name of the user"
    )
    provided_mobile: Optional[str] = Field(
        description="the provided mobile number of the user"
    )
    provided_id_4_digits: Optional[int] = Field(
        description="the provided user last 4 digits of id card"
    )

Graph 中狀態管理

class AssistantGraphState(TypedDict):
    user_question: str
    required_information: RequiredInformation
    messages: Annotated[list, add_messages]

6.1.2 測試各個功能節點

測試客服節點

system = """你是 AI 客服助理。你的任務是收集必要的用戶資訊。請遵循以下原則:

1. 保持禮貌和專業,使用適當的敬語。
2. 如果用戶詢問的資訊不完整,請適當地要求補充。
3. 在收集用戶資訊時,請確保隱私和安全。
4. 如果無法回答某個問題,請誠實地表示,並提供其他可能的幫助方式。

assistant_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system),
        (
            "human",
            "User question: {user_question}\n"
            "Chat history: {messages}\n"
            "\n\n What the user have provided so far {provided_required_information} \n\n"
        ),
    ]
)

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.7)

get_information_chain = assistant_prompt | llm
res = get_information_chain.invoke(
    {
        "user_question": "我想購買高鐵車票",
        "provided_required_information": {},
        "messages": [],
    }
)

img

測試用戶資訊收集邏輯

collect_info_system = """你是 AI 客服助理。你的任務是收集必要的用戶資訊。請遵循以下原則:

1. 保持禮貌和專業,使用適當的敬語。
2. 如果用戶詢問的資訊不完整,請適當地要求補充。
3. 在收集用戶資訊時,請確保隱私和安全。
4. 如果無法回答某個問題,請誠實地表示,並提供其他可能的幫助方式。


需要收集的資訊包括:

class RequiredInformation(BaseModel):
    provided_full_name: Optional[str] = Field(
        description="the provided full name of the user"
    )
    provided_mobile: Optional[str] = Field(
        description="the provided mobile number of the user"
    )
    provided_id_4_digits: Optional[int] = Field(
        description="the provided user last 4 digits of id card"
    )

result = collect_info_chain.invoke({
        "user_question": user_input,
        "provided_required_information": collected_info,
        "messages": [],
    })

img

為求回應友善,追加個回應用節點

response_builder_system = """
你是台灣高鐵的AI客服助理。你的任務是總結對話內容,並提供一個清晰、專業的回應給用戶。請遵循以下原則:

1. 總結已收集的用戶資訊(如果有的話)。
2. 簡要回顧對話中討論的主要問題或請求。
3. 提供任何相關的後續步驟或建議。
4. 使用禮貌和專業的語氣。
5. 如果有任何未完成的事項,請提醒用戶。

請確保你的回應簡潔但全面,並符合高鐵客服的專業標準。
"""

response_builder_prompt = ChatPromptTemplate.from_messages([
    ("system", response_builder_system),
    ("human", "用戶資訊:{user_info}\n對話歷史:{chat_history}\n請提供一個總結性的回應。")
])

summary_response = response_chain.invoke({
    "user_info": user_info,
    "chat_history": chat_history_str
})

img

6.1.3 構建並測試完整 Graph

img

init_state = AssistantGraphState(
    user_question="我想訂購高鐵票",
    required_information=RequiredInformation(),
    messages=[],
)

for output in app.stream(
        init_state,
        config={"configurable": {"thread_id": 888}}
    ):
        for key, value in output.items():
            if "messages" in value:
                try:
                    last_msg = value["messages"][-1]
                    last_msg.pretty_print()
                except Exception as e:
                    print(f"last_msg:{last_msg}")

img

6.2 階段二、搭建專案資料夾:從實驗到生產

接下來,我們建立資料夾來把 LangGRaph 當中的結構進行編列,建立新資料夾並按照以下內容編排

img

6.2.1 搭建專案資料夾結構

當中最重要的改變為將 GRaph 當中節點名稱用 consts 固定,閱讀上也比較方便
img

剩下就是把是把狀態、節點、邊個別獨立出來做管理

從 Colab 筆記本轉向這種結構化的資料夾方式,標誌著我們的專案從實驗階段邁向了生產就緒的狀態。這種轉變不僅僅是形式上的調整,更是一種思維方式的進化。

6.2.2 模組化設計的優勢

讓我們思考一下:在 Colab 中,我們可能將所有程式碼都擠在一個長長的筆記本裡。這對於快速實驗很方便,但隨著專案的成長,它很快就會變得難以管理。想像一下,當你需要在數百行程式碼中尋找某個特定函數時的挫折感!

相比之下,這種資料夾結構為每一塊功能提供了一個專屬的家。
需要修改對話邏輯?直接去 nodes/ 目錄。
想調整轉換條件?edges/ 文件夾等著你。
這種組織方式不僅讓開發更高效,也為團隊協作鋪平了道路。

更重要的是,這種結構反映了軟體工程的最佳實踐。模組化設計、關注點分離、配置與程式碼分離等原則,都在這個結構中得到了體現。這不僅讓我們的程式碼更容易維護和擴展,也為將來可能的重構或功能添加做好了準備。

當你習慣了這種結構,你會發現自己的思維方式也隨之改變。你會開始更系統地思考問題,將大型任務自然地分解為可管理的小模組。這是從業餘愛好者到專業開發者的重要一步。

6.3 階段三、LangGraph Studio 助力開發

在建立了結構化的資料夾系統後,下一個邏輯步驟是將這個靜態結構轉化為動態的、可交互的系統。這就是 LangGraph Studio 的主要應用場景。作為官方提供的本地開發和測試工具,LangGraph Studio 為 LangGraph 專案的開發提供了重要的支持。

img

使用 LangGraph Studio,你可以直觀地可視化整個圖結構。每個在 nodes/ 目錄下定義的節點,在 Studio 中都變成了可以拖拽、連接的視覺元素。edges/conditional_edges.py 中定義的條件轉換,在這裡可以通過簡單的點擊就能設置和調整。這種視覺化不僅讓複雜的邏輯變得一目了然,還大大降低了調試的難度。

7. 結語

LangGraph Studio 為 AI 代理應用開發帶來了革命性的變化。透過其直觀的介面、即時互動功能和強大的除錯工具,開發者可以更快速、更有效地構建複雜的 AI 應用。無論您是經驗豐富的 AI 開發者,還是剛踏入這個領域的新手,LangGraph Studio 都能為您的開發工作帶來顯著的提升。

總的來說,LangGraph Studio 是連接我們精心設計的資料夾結構和最終實現功能的關鍵橋樑。它讓抽象的代碼結構變成了可以觸摸、可以調整的實體,極大地提升了開發體驗和效率。

即刻前往教學程式碼 Repo,親自動手體驗 LangGraph Studio 的魅力吧!別忘了給專案按個星星並持續關注更新,讓我們一起探索AI代理的新境界。

8. 參考資料:

1.LangGraph Studio Quick Start Guide
2.LangChain 官方文件


上一篇
【Day 9】- 從 Redux 到 LangGraph:AI 時代下的狀態管理新思維
下一篇
【Day 11】- 從反思到監督:五大 AI 代理設計模式速成指南
系列文
2024 年用 LangGraph 從零開始實現 Agentic AI System31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言